06 Estendendo interfaces

Próxima Atividade
  • Sugerir melhoria
Play
Current Time 0:00
/
Duration Time 0:00
Remaining Time -0:00
Stream TypeLIVE
Loaded: 0%
Progress: 0%
0:00
Fullscreen
00:00
Mute
Playback Rate
  • 2x
  • 1.5x
  • 1.2x
  • 1x
  • 0.8x
  • 0.7x
1x
Subtitles
  • subtitles off
Captions
  • captions off
Chapters
  • Chapters
HD
Desculpe-nos pelo transtorno, mas este video não pode ser carregado, tente novamente.

Transcrição

Excelente, mas a implementação de Imprimivel e Igualavel é algo bem comum de implementarmos para praticamente todos nossas classes do modelo. É por isso que podemos criar uma interface que estende essas duas que criamos, bastando implementarmos a nova interface agregado.

Vamos criar a interface MeuObjeto:

import { Imprimivel, Igualavel } from './index';

export interface MeuObjeto<T> extends Imprimivel, Igualavel<T>  { }
export * from './Negociacao';
export * from './Negociacoes';
export * from './NegociacaoParcial';
export * from './Imprimivel';
export * from './Igualavel';
export * from './MeuObjeto';

Uma interface pode estender quantas interfaces forem necessárias. No caso, MeuObjeto teve que usar o tipo genético <T> para que esse seja considerado na interface Igualave.

Agora, vamos fazer com que Negociacao e Negociacoes implementem MeuObjeto:

import { MeuObjeto } from './index';

export class Negociacao implements MeuObjeto<Negociacao> {

   // código omitido 
}

Por fim, vamos implementar em Negociacoes:

import { Negociacao, MeuObjeto } from './index';

export class Negociacoes implements MeuObjeto<Negociacoes> {

    private _negociacoes: Negociacao[] = [];

    adiciona(negociacao: Negociacao): void {

        this._negociacoes.push(negociacao);
    }

    paraArray(): Negociacao[] {

        return ([] as Negociacao[]).concat(this._negociacoes);
    }

    paraTexto(): void {
        console.log('-- paraTexto --');
        console.log(JSON.stringify(this._negociacoes));
    }

   // precisamos implementar o método ehIgual
    ehIgual(negociacoes: Negociacoes): boolean {

        return JSON.stringify(this._negociacoes) == JSON.stringify(negociacoes.paraArray());
    }
}
Tirar dúvida Próxima Atividade
ícone TypeScript parte 2: Mais técnicas e boas práticas

TypeScript parte 2: Mais técnicas e boas práticas

100%
Aula05 de 05

Mais sobre interfaces

Atividades 6 de 17

  • 01 Chega de múltiplos console.log 13min
  • 02 Polimorfismo 11min
  • 03 Interface de método 06min
  • 04 Interface em ação
  • 05 Evitando importar negociações duplicadas 09min
  • 06 Estendendo interfaces 04min
  • 07 Sabatina
  • 08 Sintaxe inválida
  • 09 Para saber mais: TypeScript e Node.js
  • 10 Union Types e Type Guards
  • 11 Type alias
  • 12 Revisão 02min
  • 13 Mensagens de alto nível 03min
  • 14 Async/wait 11min
  • 15 Consolidando seus conhecimentos
  • 16 Considerações finais 01min
  • 17 Projeto final completo

Aulas

Outros Links

Fórum Trocar Curso
Gravatar de Marcos Katsumi Kay

Marcos Katsumi Kay 34.0k xp

Logo da Alura